﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SlideShow.Models;

namespace SlideShow.Controllers
{
    public class UsuarioController : Controller
    {

        //private List<Usuario> CrearUsuario()
        //{
        //    List<Usuario> Lista = new List<Usuario>();
        //    Lista.Add(new Usuario("edanmegu@gmail.com", "Edson", "Menéndez", "Ing. Sistemas", "Ing. de Sistemas"));
        //    Lista.Add(new Usuario("valiente@gmail.com", "Alberto", "Valiente", "Ing. Sistemas", "Ing. de Sistemas"));
        //    Lista.Add(new Usuario("garrido@gmail.com", "Cesar", "Garrido", "Ing. Sistemas", "Ing. de Sistemas"));
        //    Lista.Add(new Usuario("burga@gmail.com", "Alberto", "Burga", "Ing. Sistemas", "Ing. de Sistemas"));
        //    Lista.Add(new Usuario("lilian@gmail.com", "Lilian", "Lilian", "Ing. Sistemas", "Ing. de Sistemas"));

        //    return Lista;
        //}

        private Usuario UsuarioServ_to_Usuario(ServiceReference1.Usuario usuario) 
        {
            Usuario oUsuario = new Usuario(usuario.Email, usuario.Nombre, usuario.Apellido, usuario.Ocupacion, usuario.Carrera,usuario.Password);
            return oUsuario;
        }

        private List<Usuario> ListarUsuarios() 
        {
            ServiceReference1.UsuarioClient proxy = new ServiceReference1.UsuarioClient();
            List<ServiceReference1.Usuario> lista_usuario = proxy.listarUsuarios().ToList();
            List<Usuario> Lista_retorna = new List<Usuario>();
            foreach(ServiceReference1.Usuario element in lista_usuario)
            {
                Lista_retorna.Add(UsuarioServ_to_Usuario(element));
            }
            return Lista_retorna;
        }

        private Usuario ObtenerUsuario(string Email)
        {
            ServiceReference1.UsuarioClient proxy = new ServiceReference1.UsuarioClient();
            return UsuarioServ_to_Usuario( proxy.obtenerUsuario(Email));
        }


        //
        // GET: /Usuario/
        //Muestra el listado 
        public ActionResult Index()
        {
            List<Usuario> model = ListarUsuarios();
            return View(model);
        }

        //
        // GET: /Usuario/Details/5
        //Muestra página con los datos de un usuario
        public ActionResult Details(string id)
        {
            Usuario model = ObtenerUsuario(id);
            return View(model);
        }

        //
        // GET: /Usuario/Create
        //Muestra el formulario para llenar los datos del nuevo usuario
        public ActionResult Create()
        {
            return View();
        } 

        //
        // POST: /Usuario/Create
        //Recibe el formuario y guarda el usuario en el repositorio de datos.
        [HttpPost]
        public ActionResult Create(FormCollection collection)
        {
            try
            {
                ServiceReference1.UsuarioClient proxy = new ServiceReference1.UsuarioClient();
                proxy.crearUsuario((string)collection["Email"], (string)collection["Password"], (string)collection["Nombre"], (string)collection["Apellido"], (string)collection["Ocupacion"], (string)collection["Carrera"]);                
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
        
        //
        // GET: /Usuario/Edit/5
        //Muestra formulario con los datos del usuario a editar
        public ActionResult Edit(string id)
        {
            Usuario model = ObtenerUsuario(id);
            return View(model);
        }

        //
        // POST: /Usuario/Edit/5
        //Recibe formulario y realiza actualizacion de los datos
        [HttpPost]
        public ActionResult Edit(string id, FormCollection collection)
        {
            try
            {
                Usuario oUsuario = ObtenerUsuario(id);
                oUsuario.Nombre = collection["Nombre"];
                oUsuario.Apellido = collection["Apellido"];
                oUsuario.Ocupacion = collection["Ocupacion"];
                oUsuario.Carrera = collection["Carrera"];
                ServiceReference1.UsuarioClient proxy = new ServiceReference1.UsuarioClient();
                proxy.modificarUsuario(id, oUsuario.Password, oUsuario.Nombre, oUsuario.Apellido, oUsuario.Ocupacion, oUsuario.Carrera);
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        //
        // GET: /Usuario/Delete/5
        //Este procedimiento muestra confirmación para la eliminación
        public ActionResult Delete(string id)
        {
            Usuario oUsuario = ObtenerUsuario(id);
            return View(oUsuario);
        }

        //
        // POST: /Usuario/Delete/5
        //Este procedimiento Realiza la eliminacion
        [HttpPost]
        public ActionResult Delete(string id, FormCollection collection)
        {
            try
            {
                ServiceReference1.UsuarioClient proxy = new ServiceReference1.UsuarioClient();
                proxy.eliminarUsuario(id);
 
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
    }
}
